from flask import Flask, request, jsonify
import logging
from .batchupdateflagbyskubarcode import JikeYunAPI
from config import Config


def create_batch_flag_routes(app):
    """
    为Flask应用添加批量更新商品标签的路由
    """

    @app.route('/api/batch_update_flag', methods=['POST'])
    def batch_update_flag():
        """
        批量更新商品标签接口
        """
        try:
            # 获取请求数据
            data = request.get_json()
            logging.info(f"批量更新商品标签API - 接收到的外部传入数据: {data}")

            if not data or 'items' not in data:
                return jsonify({
                    'success': False,
                    'message': '请求参数错误，需要提供items数组'
                }), 400

            items = data['items']
            logging.info(f"批量更新商品标签API - 提取的items参数: {items}")
            if not isinstance(items, list) or len(items) == 0:
                return jsonify({
                    'success': False,
                    'message': 'items必须是非空数组'
                }), 400

            # 处理复杂的数据格式，转换为API需要的格式
            processed_items = []
            for item in items:
                try:
                    # 数据格式：[skuid，货品编码，货品名称，条码，货品分类，货品标记，需传入的标记，变动原因，修改时间]
                    if isinstance(item, list) and len(item) >= 7:
                        sku_barcode = item[3]  # 条码
                        current_flags = item[5]  # 货品标记
                        new_flag = item[6]  # 需传入的标记

                        # 处理货品标记，模糊匹配含有"补货"的字段并替换
                        if isinstance(current_flags, str):
                            flag_list = current_flags.split(',')
                        elif isinstance(current_flags, list):
                            flag_list = current_flags
                        else:
                            flag_list = [str(current_flags)]

                        # 查找并替换含有"补货"的标记
                        updated_flags = []
                        replaced = False
                        for flag in flag_list:
                            flag = flag.strip()
                            if "补货" in flag and not replaced:
                                # 如果是列表格式的新标记，取第一个
                                if isinstance(new_flag, list) and len(new_flag) > 0:
                                    updated_flags.append(new_flag[0])
                                else:
                                    updated_flags.append(str(new_flag))
                                replaced = True
                            else:
                                updated_flags.append(flag)

                        # 如果没有找到含"补货"的标记，直接添加新标记
                        if not replaced:
                            if isinstance(new_flag, list) and len(new_flag) > 0:
                                updated_flags.append(new_flag[0])
                            else:
                                updated_flags.append(str(new_flag))

                        # 构造API需要的格式
                        processed_item = {
                            'skuBarcode': sku_barcode,
                            'flagDataName': ','.join(updated_flags)
                        }
                        processed_items.append(processed_item)

                        logging.info(
                            f"处理商品 {item[2]} - 条码: {sku_barcode}, 原标记: {current_flags}, 新标记: {','.join(updated_flags)}")

                    elif isinstance(item, dict) and 'flagDataName' in item and 'skuBarcode' in item:
                        # 如果已经是正确格式，直接使用
                        processed_items.append(item)
                    else:
                        return jsonify({
                            'success': False,
                            'message': f'数据格式错误，item格式不正确: {item}'
                        }), 400

                except Exception as e:
                    logging.error(f"处理item时发生错误: {item}, 错误: {str(e)}")
                    return jsonify({
                        'success': False,
                        'message': f'处理数据时发生错误: {str(e)}'
                    }), 400

            logging.info(f"处理后的items参数: {processed_items}")

            if len(processed_items) == 0:
                return jsonify({
                    'success': False,
                    'message': '没有有效的数据项可以处理'
                }), 400

            # 从配置获取API密钥
            app_key = Config.JIKEYUN_APP_KEY
            app_secret = Config.JIKEYUN_APP_SECRET

            # 创建API客户端并调用
            api_client = JikeYunAPI(app_key, app_secret)
            response = api_client.batch_update_flag_by_sku_barcode(processed_items)

            # 处理响应
            if response.get('code') == 200 and response.get('result', {}).get('data') is not None:
                return jsonify({
                    'success': True,
                    'message': '批量更新成功',
                    'data': response.get('result', {}).get('data')
                })
            else:
                error_msg = response.get('msg', '未知错误')
                sub_code = response.get('subCode', '')
                return jsonify({
                    'success': False,
                    'message': f'更新失败: {error_msg}',
                    'error_code': sub_code,
                    'raw_response': response
                }), 500

        except Exception as e:
            logging.error(f"批量更新商品标签时发生错误: {str(e)}")
            return jsonify({
                'success': False,
                'message': f'服务器内部错误: {str(e)}'
            }), 500

    return app
